import bpy
from bpy.types import Operator
import 全局控制.Node.节点和插座基类.bl_节点基类 as 基类


class C_SceneNode_执行入口(基类.C_SN_基类):
	bl_dname = 'bl_node_执行入口'
	bl_label = '执行入口'

	m_是否执行 = bpy.props.BoolProperty(name='播放执行', default=True)
	def init(self, context):
		super(C_SceneNode_执行入口, self).f_init(context)
		self.inputs.new('C_NodeSocket_i', name='帧间隔')
		self.inputs.new('C_NodeSocket_i', name='当前帧')
		self.outputs.new('C_NodeSocket_bool', name='是否执行')

	def draw_buttons(self, context, layout):
		layout.prop(self, "m_是否执行")

	def update(self):
		if self.inputs['当前帧'].is_linked:
			self.inputs['帧间隔'].hide = False
		else:
			self.inputs['帧间隔'].hide = True
			
	def f_update(self, 是否向下传递=False, input插座=None):
		if self.m_是否执行:
			间隔 = self.inputs['帧间隔'].f_getData()
			是否执行 = False
			if 间隔 > 0 :
				if self.inputs['当前帧'].f_getData() % 间隔 == 0 :
					是否执行 = True
			else:
				是否执行 = True
			#print(self.name, '******** 是否执行 = ', 是否执行, 间隔, self.inputs['当前帧'].f_getData())
			self.outputs['是否执行'].f_setData(是否执行)
		else:
			self.outputs['是否执行'].f_setData(self.m_是否执行)
		super(C_SceneNode_执行入口, self).f_update(是否向下传递, input插座)
		

	def f_is强制Update(self):
		return True



class C_NODE_MENU_执行入口(bpy.types.Operator):
	bl_idname = 'node.global_node_entrances'
	bl_label = '执行入口'
	bl_options = {'REGISTER', 'UNDO'}

	def execute(operator, context):
		bpy.ops.node.add_node(type='C_SceneNode_执行入口', use_transform=True)
		return {'FINISHED'}









E_类型枚举 = [
	("TYPE_手动", "手动", "", 0),
	("标识_逐帧", "逐帧", "", 1),
	("标识_实时", "实时", "", 2),
]

def f_节点更新方式设置(self, context):
	self.name

class C_Node_执行(基类.C_SN_基类):
	bl_dname = 'bl_node_执行入口'
	bl_label = '执行入口'

	m_方式切换 = bpy.props.EnumProperty(items = E_类型枚举, name="更新方式", default="TYPE_手动", update=f_节点更新方式设置)
	def init(self, context):
		super(C_Node_执行, self).f_init(context)
		
	def draw_buttons(self, context, layout):
		layout.prop(self, "m_方式切换")

	def f_update(self, 是否向下传递=False, input插座=None):
		super(C_Node_执行, self).f_update(是否向下传递, input插座)


class C_NODE_MENU_执行(bpy.types.Operator):
	bl_idname = 'node.global_node_exec_update'
	bl_label = '执行'
	bl_options = {'REGISTER', 'UNDO'}

	def execute(operator, context):
		bpy.ops.node.add_node(type='C_Node_执行', use_transform=True)
		return {'FINISHED'}







classes = (
	C_SceneNode_执行入口,
	C_NODE_MENU_执行入口,

	C_Node_执行,
	C_NODE_MENU_执行
)

def register():
	for c in classes:
		bpy.utils.register_class(c)
		

def unregister():
	for c in classes:
		bpy.utils.unregister_class(c)

	




